In computer science, a virtual machine (VM) is a portion of software that, when executed on appropriate hardware, creates an environment allowing the virtualization of an actual physical computer system. Each VM may function as a self-contained platform, running its own operating system (OS) and software applications (processes). Typically, a virtual machine monitor (VMM) manages allocation and virtualization of computer resources and performs context switching, as may be necessary, to cycle between various VMs.
A host machine (e.g., computer or server) is typically enabled to simultaneously run multiple VMs, where each VM may be used by a local or remote client. The host machine allocates a certain amount of the host's resources to each of the VMs. Each VM is then able to use the allocated resources to execute applications, including operating systems known as guest operating systems. The VMM virtualizes the underlying hardware of the host machine or emulates hardware devices, making the use of the VM transparent to the guest operating system or the remote client that uses the VM.
Often times, a VM corrupts the disk image of the VM and it is not possible to recover from within the VM. A classic solution to VM disk corruption is a recovery that is performed by the host machine. For example, the host machine may utilize an emulated disk of the VM that is stored separate from the VM in the host machine to restore the VM. This backup file in the host machine can be used to restore the VM by the host machine whenever the VM becomes corrupt. However, this solution can be quite expensive space-wise for a host machine. Some current solutions overcome this space constraint by utilizing snapshotting, where a snapshot of the VM image is taken and then any subsequent changes made to the VM are incremented on top of the snapshot. In either case, the recovery operations are performed by the host machine and the VM is not running or accessing the recovery file. Furthermore, snapshotting can often be problematic due to the multitude of incremental changes being made, which can cause complications for the host machine and VM.
Another current solution for recovering from VM disk corruption does include the VM performing operations for the recovery. In this case, the VM itself runs back-up software that creates a copy of the VM disk and can restore the VM from that back-up copy. This backup source is part of the regular running VM at all times. A problem with this solution is that the VM can only recover to the specific point that the backup copy was made. In addition, there is a cost in terms of space for maintaining a backup copy of the VM at all times. Finally, the involvement of the VM can be problematic for recovery when the VM itself becomes corrupted, often preventing any recovery operations from being performed by the VM at all.